message(NOTICE "开始构建 x264 模块")
# 检查构建目标是否存在
if(TARGET x264-${X264_TAG})
    message(NOTICE "x264 模块已存在 x264-${X264_TAG}")
 return()
endif()

# 检查生成的文件是否存在
existsInstallFiles(
    ${MODULE_STAMP}/x264/${X264_TAG}
    ${MODULE_INSTALL_DIR}/x264/${X264_TAG}
    x264-${X264_TAG})

# 构建配置文件
set(X264_CONFIGURE CACHE STRING "x264 configure" FORCE)
set(X264_ENV CACHE STRING "x264 build command" FORCE)


# Android 配置 模块
if(CMAKE_SYSTEM_NAME STREQUAL "Android")
    # 构建命令
    list(APPEND X264_ENV "env")
    list(APPEND X264_ENV "CC=${CMAKE_C_COMPILER}")
    list(APPEND X264_ENV "CXX=${CMAKE_CXX_COMPILER}")
    # 配置命令
    list(APPEND X264_CONFIGURE "--host=${TARGET_ABI}") # 目标操作系统
    list(APPEND X264_CONFIGURE "--cross-prefix=${CROSS}") # 交叉编译工具链前缀
    list(APPEND X264_CONFIGURE "--sysroot=${CMAKE_SYSROOT}") # 设置查找库和头文件的根目录

# Linux 配置 模块
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")

# Windows 配置 模块
elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
    list(APPEND X264_CONFIGURE "<SOURCE_DIR>/configure")
    list(APPEND X264_CONFIGURE "win64-x86_64")
else()
    message(FATAL_ERROR "不支持的系统类型 ${CMAKE_SYSTEM_NAME}")
endif()

# 定义 x264 是否构建 静态库动态库 选项
if(BUILD_SHARED_LIBS)
    list(APPEND X264_CONFIGURE "--enable-shared")
endif()
if(BUILD_STATIC_LIBS)
    list(APPEND X264_CONFIGURE "--enable-static")
endif()

# 创建
#add_custom_target
# 构建 x264 库
ExternalProject_Add(
    x264-${X264_TAG}
    # 目录配置
    PREFIX         ${EXTERNAL_PROJECT_ROOT}                        # ✅ 显式设置 prefix 目录
    SOURCE_DIR     ${MODULE_SRC}/x264/${X264_TAG}            # ✅ 显式设置 source 目录
    BINARY_DIR     ${MODULE_BUILD}/x264/${X264_TAG}          # ✅ 显式设置 build 目录
    INSTALL_DIR    ${MODULE_INSTALL_DIR}/x264/${X264_TAG}    # ✅ 显式设置 install 目录
    STAMP_DIR      ${MODULE_STAMP}/x264/${X264_TAG}          # ✅ 显式设置 stamp 目录
    TMP_DIR        ${MODULE_TMP}/x264/${X264_TAG}            # ✅ 显式设置 tmp 目录

    DOWNLOAD_COMMAND # 下载命令
        COMMAND ${CMAKE_COMMAND}
            -DSOURCE_DIR=<SOURCE_DIR>
            -DGIT_REPOSITORY=${X264_REPO}
            -DGIT_TAG=${X264_TAG}
            -P ${__DIR}/utils/git.cmake

    CONFIGURE_COMMAND # ✅ 正确的 CMake 配置命令
            ${X264_ENV}
            <SOURCE_DIR>/configure
            --prefix=<INSTALL_DIR> # 安装目录
            --disable-opencl       # 禁用 OpenCL
            --disable-ffms         # 禁用 FFMS
            --disable-gpac         # 禁用 GPAC
            --disable-lavf         # 禁用 Lavf
            --disable-swscale      # 禁用 Swscale
            --disable-lsmash       # 禁用 LSMASH
            --disable-cli          # 禁用 CLI
            --disable-asm          # 禁用 ASM
            --enable-debug         # 启用调试
            --enable-pic           # 启用 PIC
           --extra-cflags=${CMAKE_C_FLAGS} # 编译选项
           --extra-ldflags=${CMAKE_EXE_LINKER_FLAGS} # 链接选项
            ${X264_CONFIGURE}
    # 构建命令
    BUILD_COMMAND
      ${X264_ENV}
      make -j${NPROC}

    INSTALL_COMMAND # 安装命令
        COMMAND make install
            # 将安装文件路径保存到 文件去
            COMMAND ${CMAKE_COMMAND}
            -DINSTALL_DIR=<INSTALL_DIR>
            -DCMAKE_PREFIX_PATH=${SYSTEM_PREFIX}
            -P ${__DIR}/utils/write_install_files.cmake
    # ✅ 启用所有日志（调试必备）
    LOG_DOWNLOAD      OFF                           # 下载日志
    LOG_CONFIGURE     OFF                            # 配置日志
    LOG_BUILD         OFF                           # 构建日志
    LOG_INSTALL       OFF                           # 安装日志
    LOG_OUTPUT_ON_FAILURE ON                       # 失败时自动输出日志
   # 依赖目标 安装需要先安装 automake libtool autopoint
   DEPENDS
   STEP_TARGETS configure build install # 关键：添加 install 步骤
)

# 导入 x264 库
add_library(x264::x264 STATIC IMPORTED)
set_target_properties(x264::x264 PROPERTIES
    IMPORTED_LOCATION ${MODULE_INSTALL_DIR}/x264/${X264_TAG}/lib/libx264.a
    INTERFACE_INCLUDE_DIRECTORIES ${MODULE_INSTALL_DIR}/x264/${X264_TAG}/include
)
# 依赖目标
add_dependencies(x264::x264 x264-${X264_TAG})
